package org.yelongframework.json.bind;

import java.lang.reflect.Type;

import org.yelongframework.core.beans.bind.StringBeanBinder;
import org.yelongframework.json.JsonException;

/**
 * JSON与Bean绑定器
 * 
 * @since 1.0.0
 */
public interface JsonBeanBinder extends StringBeanBinder {

	// ==================================================对象转JSON==================================================

	/**
	 * 将对象转换为JSON字符串
	 * 
	 * @param src 需要转换的对象
	 * @return 转换后的JSON字符串
	 * @throws JsonException JSON异常
	 */
	String toJson(Object src) throws JsonException;

	/**
	 * 将对象转换为JSON字符串。反射时采用源类型。
	 * 
	 * @param src       需要转换的对象
	 * @param typeOfSrc 转换的对象源类型
	 * @return 转换后的JSON字符串
	 * @throws JsonException JSON异常
	 */
	String toJson(Object src, Type typeOfSrc) throws JsonException;

	// ==================================================JSON转对象==================================================

	/**
	 * 将JSON字符串转换为对象
	 * 
	 * @param <T>      所需对象的类型
	 * @param json     JSON字符串
	 * @param classOfT 期望的类型
	 * @return 转换后的对象
	 * @throws JsonException JSON异常
	 */
	<T> T fromJson(String json, Class<T> classOfT) throws JsonException;

	/**
	 * 将JSON字符串转换为对象
	 * 
	 * @param <T>     所需对象的类型
	 * @param json    JSON字符串
	 * @param typeOfT 期望的类型
	 * @return 转换后的对象
	 * @throws JsonException JSON异常
	 */
	<T> T fromJson(String json, Type typeOfT) throws JsonException;

}
